<?php
/**
 * 服务端公共函数
 * Created by PhpStorm.
 * User: Yui
 * Date: 2017/3/21 0021
 * Time: 17:23
 */

namespace common\library;

class comFun
{

    /**
     * 检查id列表的格式
     * 1,2,3    前后不能有空格，结尾不能有逗号，数字不能为0
     * @param string $ids
     * @return bool
     */
    public static function checkIdsFormat(string $ids)
    {
        if (preg_match('/^[1-9]+(\,[1-9]+)*$/', $ids)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 数组转json，只支持一维数组
     * 用户发短信
     * @param $arr
     * @return string
     */
    public static function arrToJsonStr($arr)
    {
        $str = '{';
        foreach ($arr as $k => $v) {
            $str .= '"' . $k . '":"' . $v . '",';
        }
        $str = rtrim($str, ',') . '}';
        return $str;
    }

    /**
     * 格式化日期
     * @param $int
     * @return bool|string
     */
    public static function formatDate($int)
    {
        return date('Y-m-d H:i:s', $int);
    }

    /**
     * 购物车字符串转数组
     * @param string $str
     * @return array
     */
    public static function cartStrToArr(string $str):array
    {
        $arr = explode(',', $str);
        $temp = [];
        foreach ($arr as $v) {
            $t = explode(':', $v);
            $temp[$t[0]] = [
                'goods_id' => $v[0],
                'buy_num' => $v[2]
            ];
        }
        return $temp;
    }

    /**
     * 检查购物车输入格式1:1,3:1
     * 商品id:购买商品数量
     * @param string $str
     * @return bool
     */
    public static function checkCartFormat(string $str):bool
    {
        if (preg_match('/^[1-9]\d*\:[1-9]\d*(\,[1-9]\d*\:[1-9]\d*)*$/', $str)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 6位随即字幕数组组合
     * @param int $len 生成的长度
     * @param string $chars 生成的字符串
     * @return string
     */
    public static function createRandom($len, $chars = ''):string
    {
        if (empty($chars)) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        }
        mt_srand(10000000 * (double)microtime());
        for ($i = 0, $str = '', $lc = strlen($chars) - 1; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $lc)];
        }
        return $str;
    }

    /**
     * 创建支付订单号
     * @param int $len
     * @return string
     */
    public static function createOutTradeNo($len = 20)
    {
        $str = '';
        for ($i = 0; $i < $len; $i++) {
            $str .= mt_rand(0, 9);
        }
        return $str;
    }

    /**
     * 判断是否为id
     * @param $id
     * @return bool
     */
    public static function isLongId($id):bool
    {
        if (preg_match('/^\d{20}$/', $id)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 验证正整数,大于0的整数
     * @param $id
     * @return bool
     */
    public static function isPositiveInt($id):bool
    {
        if (preg_match('/^[1-9]\d*$/', $id)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 递归压缩数组成为多级
     * @param $array
     * @param string $idKey
     * @param string $parentKey
     * @param int $parentId
     * @param int $level
     * @return array
     */
    public static function formatMultidimensionalArrays($array, $idKey = 'id', $parentKey = 'parent_id', $parentId = '', $level = 0):array
    {
        $arr = [];
        foreach ($array as $value) {
            if ($value[$parentKey] == $parentId) {
                !$parentId && $level = 0;
                $value['level'] = $level;
                $temp = self::formatMultidimensionalArrays($array, $idKey, $parentKey, $value[$idKey], ++$level);
                //判断是否存在子数组
                $temp && $value['child'] = $temp;
                $arr[] = $value;
            }
        }
        return $arr;
    }

    /**
     * 递归重排数组
     * @param $array
     * @param string $idKey
     * @param string $parentKey
     * @param string $parentId
     * @param int $level
     */
    public static function formatTree($array, $idKey = 'id', $parentKey = 'parent_id', $parentId = '', $level = 0):array
    {
        $arr = [];
        foreach ($array as $value) {
            if ($value[$parentKey] == $parentId) {
                !$parentId && $level = 0;
                $value['level'] = $level;
                $temp = self::formatTree($array, $idKey, $parentKey, $value[$idKey], $level + 1);
                //判断是否存在子数组
                $arr[] = $value;
                foreach ($temp as $t) {
                    array_push($arr, $t);
                }
            }
        }
        return $arr;
    }

    /**
     * 验证手机号码
     * @return string
     */
    public static function checkMobile($mobile):bool
    {
        if (preg_match("/^1[34578]\d{9}$/", $mobile)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取驼峰命名
     * @param $str
     * @return string
     */
    public static function getHumpName($str, $separator = '-'):string
    {
        //分割字符串
        $tempArr = explode($separator, $str);
        //首字母大写
        foreach ($tempArr as &$v) {
            $v = ucfirst($v);
        }
        //组装
        return implode('', $tempArr);
    }
}